package activity;

import java.util.Date;

import model.Todo;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;

import com.example.apptodo.R;

import db.SimpleDatabaseHelper;

public class MainActivity extends Activity 
						  implements OnItemClickListener, 
						  			 OnItemLongClickListener {
	
	TodoAdapter adapter = null;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
		Log.i("MainActivity", "onCreate");
		
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //	ListView用のAdapterを生成する
        adapter = new TodoAdapter(
        		this, 
        		null, 
        		R.layout.list_item);
        //	ListViewにAdapterを設定する
        ListView listView = (ListView)findViewById(R.id.listView);
        listView.setAdapter(adapter);
        //	ListViewにItemClickListenerを設定する
        listView.setOnItemClickListener(this);
        //	ListViewにItemLongClickListenerを設定する
        listView.setOnItemLongClickListener(this);
    }
    
    @Override
	public boolean onCreateOptionsMenu(Menu menu) {
    	getMenuInflater().inflate(R.menu.option_menu, menu);
    	return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent i = new Intent(this, activity.MyConfig.class);
		startActivity(i);
		return true;
	}

	@Override
	protected void onResume() {
		Log.i("MainActivity", "onResume");
		
		super.onResume();
		//	設定情報を取得する
		SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
		boolean showPast = pref.getBoolean("past", true);
		boolean showDone = pref.getBoolean("done", true);
		//	抽出条件を編集する
        //
        //  過去のタスクを表示する && 完了したタスクを表示する
        //  =>  無条件
        //  過去のタスクを表示する && 完了したタスクを表示しない
        //  =>  done = 0
        //  過去のタスクを表示しない && 完了したタスクを表示する
        //  =>  time > (now)
        //  過去のタスクを表示しない && 完了したタスクを表示しない
        //  =>  time > (now) and done = 0

        //  現在の日時
        String timeNow = String.valueOf(new Date());
        //  パラメータ用変数
        String selection = null;
        String[] args = null;
        //  パラメータ
        String selectionAllTimeNoDone   = "done = 0";
        String selectionNoPastWithDone  = "time > ?";
        String selectionNoPastNoDone    = "time > ? and done = 0";
		String[] argsTime = {timeNow};
        //  設定によって抽出条件を変える
		if (showPast && !showDone) {
			selection = selectionAllTimeNoDone;
		}
		else if (!showPast && showDone) {
			selection = selectionNoPastWithDone;
			args = argsTime;
		}
		else if (!showPast && !showDone) {
			args = selectionNoPastNoDone;
            args = argsTime;
		}
		//	Adapterのデータをクリアする
		adapter.clear();
		//	テーブルから全件読み込んでAdapterに追加する
		SimpleDatabaseHelper helper = new SimpleDatabaseHelper(this);
		SQLiteDatabase db = helper.getReadableDatabase();
		//	選択する列名
		String[] cols = {"id", "action", "time", "done"};	
		//	検索を実行
		Cursor cs = db.query("todos", cols, selection, args, null, null, "id");
		//	検索結果の先頭へ
		boolean hasRow = cs.moveToFirst();
		//	検索結果を行ごとに処理する
		while (hasRow) {
			//	オブジェクトを生成する
			Todo todo = new Todo();
			todo.setId(cs.getLong(0));
			todo.setAction(cs.getString(1));
			todo.setTime(cs.getLong(2));
			todo.setDone(cs.getInt(3));
			//	Adapterのデータに追加する
			adapter.add(todo);
			//	検索結果の次の行へ移動する
			hasRow = cs.moveToNext();
		}
		//	Adapterにデータの変更が発生したことを通知する
		adapter.notifyDataSetChanged();
	}
    /**
     * 追加ボタンがクリックされると呼び出される
     * @param view	追加ボタン
     */
    public void btnAdd_onClick(View view) {
		Log.i("MainActivity", "btnAdd_onClick");
		
    	//	AddActivityを起動するためのIntentを生成
    	Intent i = new Intent(
    			this, 
    			activity.AddActivity.class);
    	//	AddActivityを起動
    	this.startActivity(i);
    }
    
	@Override
	public void onItemClick(
			AdapterView<?> parent, 
			View view, 
			int position,
			long id) {
		//	選択された情報を取得する
		Todo todo = (Todo)adapter.getItem(position);
		//	編集画面へ遷移する
		Intent i = new Intent(
				getApplicationContext(), 
				activity.EditActivity.class);
		//	選択された情報を渡す
		i.putExtra("todo", todo);
		
		startActivity(i);
	}

	@Override
	public boolean onItemLongClick(
			AdapterView<?> parent, 
			View view,
			int position, 
			long id) {
		//	選択された情報を取得する
		Todo todo = (Todo)adapter.getItem(position);
		
		if (!todo.getDone()) {
			//	状態を更新する（完了）
			todo.setDone(true);
			//	テーブルを更新する
			SimpleDatabaseHelper helper = new SimpleDatabaseHelper(this);
			helper.update(todo);
			//	データの変更を通知する
			adapter.notifyDataSetChanged();
		}
		return true;
	}
 }
